/**
 * 
 */
package br.com.skynix.tcmc.model.seguranca;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.annotations.ForeignKey;

import br.com.skynix.tcmc.base.model.EntidadeAuditavel;

/**
 * @author davi
 * 
 */
@Entity
@Table(name = "tb_menu")
public class Menu extends EntidadeAuditavel {
	@ManyToOne
	@JoinColumn(name = "id_menu_fk", nullable = true,
			referencedColumnName = "id")
	@ForeignKey(name = "FK001_menu")
	private Menu menu;

	@NotNull
	@Size(max = 15)
	@Column(nullable = false, length = 15)
	private String indice;

	@NotNull
	@Size(max = 255)
	@Column(nullable = false, length = 255)
	private String titulo;

	@NotNull
	@Size(max = 200)
	@Column(nullable = false, length = 200)
	private String controlador;

	@ManyToMany(mappedBy = "menus")
	@ForeignKey(name = "FK002_menu_x_funcionalidade")
	private Set<Funcionalidade> funcionalidades;

	@ManyToMany
	@JoinTable(name = "tb_grupo_x_menu", joinColumns = @JoinColumn(
			name = "id_grupo_fk", referencedColumnName = "id",
			nullable = false, table = "tb_grupo"),
			inverseJoinColumns = @JoinColumn(name = "id_menu_fk",
					referencedColumnName = "id", nullable = false,
					table = "tb_menu"))
	@ForeignKey(name = "FK001_grupo_x_menu")
	private Set<Grupo> grupos;

	/**
	 * @return the menu
	 */
	public Menu getMenu() {
		return menu;
	}

	/**
	 * @param menu the menu to set
	 */
	public void setMenu(Menu menu) {
		this.menu = menu;
	}

	/**
	 * @return the indice
	 */
	public String getIndice() {
		return indice;
	}

	/**
	 * @param indice the indice to set
	 */
	public void setIndice(String indice) {
		this.indice = indice;
	}

	/**
	 * @return the titulo
	 */
	public String getTitulo() {
		return titulo;
	}

	/**
	 * @param titulo the titulo to set
	 */
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	/**
	 * @return the controlador
	 */
	public String getControlador() {
		return controlador;
	}

	/**
	 * @param controlador the controlador to set
	 */
	public void setControlador(String controlador) {
		this.controlador = controlador;
	}

	/**
	 * @return the funcionalidades
	 */
	public Set<Funcionalidade> getFuncionalidades() {
		return funcionalidades;
	}

	/**
	 * @param funcionalidades the funcionalidades to set
	 */
	public void setFuncionalidades(Set<Funcionalidade> funcionalidades) {
		this.funcionalidades = funcionalidades;
	}

	/**
	 * @return the grupos
	 */
	public Set<Grupo> getGrupos() {
		return grupos;
	}

	/**
	 * @param grupos the grupos to set
	 */
	public void setGrupos(Set<Grupo> grupos) {
		this.grupos = grupos;
	}
}
